package beanstao.util.exception.base;

import beanstao.util.Sber;

/**
 * 本框架的异常的基类。<BR>
 * 基础的非 Checked 的 Exception，作为整个框架的所有异常基类。<BR>
 * 本类仅作为系统 RuntimeException 类的上浮，相对的实现一些本框架体系的方法。<BR>
 * <b>使用的过程请继承本类的子类 AppException</b>
 */
@SuppressWarnings("serial")
public abstract class FrameworkRuntimeException extends RuntimeException
{
	/**
	 * 框架提示信息
	 */
	private final static String framework = "\r平安力合JAVA框架。";
	/**
	 * 框架提示信息
	 */
	protected final static String messageHead = "\r异常信息:";

	/**
	 * @param logMessage
	 *            记录日志的消息
	 */
	public FrameworkRuntimeException(String logMessage)
	{
		super(framework + messageHead + logMessage);
	}

	/**
	 * @param logMessage
	 *            记录日志的消息
	 * @param messageArg
	 *            异常描述的参数，用于错误描述中仅有一个参数的情况
	 */
	public FrameworkRuntimeException(String logMessage, Object... messageArgs)
	{
		super(framework + messageHead + logMessage);
		this._selfMsgs = messageArgs;
	}

	/**
	 * @param cause
	 *            引起异常的原始异常
	 * @param logMessage
	 *            记录日志的消息
	 */
	public FrameworkRuntimeException(String logMessage, Throwable cause)
	{
		super(framework + messageHead + logMessage, cause);
	}

	/**
	 * @param cause
	 *            引起异常的原始异常
	 */
	public FrameworkRuntimeException(Throwable cause)
	{
		super("", cause);
		this._cause = cause;
	}

	protected Throwable _cause;

	protected Object[] _selfMsgs;

	@Override
	public String getMessage()
	{
		Sber sber = Sber.ME(super.getMessage());
		for (Object msg : this._selfMsgs)
		{
			String txt = "";
			try
			{
				if (msg instanceof Exception)
				{
					txt = ((Exception) msg).getMessage();
				}
				else
				{
					txt = String.valueOf(msg);
				}
			}
			catch (Exception e)
			{
				txt = msg.getClass().getSimpleName();
			}
			sber.append("\r").append(txt);
		}
		return sber.toString();
	}

}
